/**
 * 深度克隆
 */
export function deepClone(obj) {
  const objClass = getObjClass(obj);
  let result = null;

  if (objClass === 'Object') {
    result = {};
  } else if (objClass === 'Array') {
    result = [];
  } else {
    // 如果是其他数据类型不复制，直接将数据返回
    return obj;
  }

  // 遍历目标对象
  for (const k of Object.keys(obj)) {
    const value = obj[k];
    if (getObjClass(value) === 'Object' || 'Array') {
      result[k] = deepClone(value);
    } else {
      result[k] = obj[k];
    }
  }

  return result;
}

/**
 * 深度克隆(复制)
 */
function getObjClass(obj) {
  const result = Object.prototype.toString.call(obj).slice(8, -1);
  if (result === 'Null') {
    return 'Null';
  } else if (result === 'Undefined') {
    return 'Undefined';
  } else {
    return result;
  }
}
